{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "## Kaggle Bosch Production Line Challenge\n",
    "The Kaggle Bosch challenge aiming to predict the failed products in a production line.The production line dataset is one of the largest public manufacturing datasets. Each observation represents a product, which moves through a production line. The features are anonymized. The naming of the feature follows the convention of “L#_S##_F####”, which representing the line, station, and feature number. The ground truth of whether a product is a failure is provided as a binary class, with 1 representing failure and 0 representing pass. The goal is to use the features to predict the failed product."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 0 Preprocess\n",
    "Load libraires, data audit, remove constant columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 0.0 load libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\utils\\sparsetools\\__init__.py:3: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from ._min_spanning_tree import minimum_spanning_tree\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\utils\\sparsetools\\_graph_validation.py:5: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from ._graph_tools import csgraph_to_dense, csgraph_from_dense,\\\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\utils\\sparsetools\\__init__.py:4: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from ._traversal import connected_components\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\utils\\extmath.py:20: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from ._logistic_sigmoid import _log_logistic_sigmoid\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\utils\\extmath.py:22: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from .sparsefuncs_fast import csr_row_norms\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\metrics\\cluster\\supervised.py:18: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from .expected_mutual_info_fast import expected_mutual_information\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\metrics\\pairwise.py:56: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from .pairwise_fast import _chi2_kernel_fast, _sparse_manhattan\n",
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\matplotlib\\backends\\qt_compat.py:84: ImportWarning: Not importing directory 'C:\\Users\\Dalaska\\Anaconda2\\sip': missing __init__.py\n",
      "  import sip\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\linear_model\\least_angle.py:24: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from ..utils import array2d, arrayfuncs, as_float_array, check_arrays\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\linear_model\\coordinate_descent.py:26: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from . import cd_fast\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\linear_model\\__init__.py:21: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from .sgd_fast import Hinge, Log, ModifiedHuber, SquaredLoss, Huber\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\svm\\base.py:8: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from . import libsvm, liblinear\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\svm\\base.py:9: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from . import libsvm_sparse\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\utils\\random.py:9: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from ._random import sample_without_replacement\n",
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\ipykernel\\pylab\\config.py:66: DeprecationWarning: metadata {'config': True} was set from the constructor.  Metadata should be set using the .tag() method, e.g., Int().tag(key1='value1', key2='value2')\n",
      "  inline backend.\"\"\"\n",
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\ipykernel\\pylab\\config.py:71: DeprecationWarning: metadata {'config': True} was set from the constructor.  Metadata should be set using the .tag() method, e.g., Int().tag(key1='value1', key2='value2')\n",
      "  'retina', 'jpeg', 'svg', 'pdf'.\"\"\")\n",
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\ipykernel\\pylab\\config.py:85: DeprecationWarning: metadata {'config': True} was set from the constructor.  Metadata should be set using the .tag() method, e.g., Int().tag(key1='value1', key2='value2')\n",
      "  use `figure_formats` instead)\"\"\")\n",
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\ipykernel\\pylab\\config.py:95: DeprecationWarning: metadata {'config': True} was set from the constructor.  Metadata should be set using the .tag() method, e.g., Int().tag(key1='value1', key2='value2')\n",
      "  \"\"\"\n",
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\ipykernel\\pylab\\config.py:114: DeprecationWarning: metadata {'config': True} was set from the constructor.  Metadata should be set using the .tag() method, e.g., Int().tag(key1='value1', key2='value2')\n",
      "  \"\"\")\n",
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\ipykernel\\pylab\\config.py:44: DeprecationWarning: InlineBackend._config_changed is deprecated: use @observe and @unobserve instead.\n",
      "  def _config_changed(self, name, old, new):\n",
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\traitlets\\traitlets.py:770: DeprecationWarning: A parent of InlineBackend._config_changed has adopted the new @observe(change) API\n",
      "  clsname, change_or_name), DeprecationWarning)\n",
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\IPython\\core\\formatters.py:98: DeprecationWarning: DisplayFormatter._formatters_default is deprecated: use @default decorator instead.\n",
      "  def _formatters_default(self):\n",
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\IPython\\core\\formatters.py:677: DeprecationWarning: PlainTextFormatter._deferred_printers_default is deprecated: use @default decorator instead.\n",
      "  def _deferred_printers_default(self):\n",
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\IPython\\core\\formatters.py:669: DeprecationWarning: PlainTextFormatter._singleton_printers_default is deprecated: use @default decorator instead.\n",
      "  def _singleton_printers_default(self):\n",
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\IPython\\core\\formatters.py:672: DeprecationWarning: PlainTextFormatter._type_printers_default is deprecated: use @default decorator instead.\n",
      "  def _type_printers_default(self):\n",
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\IPython\\core\\formatters.py:672: DeprecationWarning: PlainTextFormatter._type_printers_default is deprecated: use @default decorator instead.\n",
      "  def _type_printers_default(self):\n",
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\IPython\\core\\formatters.py:677: DeprecationWarning: PlainTextFormatter._deferred_printers_default is deprecated: use @default decorator instead.\n",
      "  def _deferred_printers_default(self):\n"
     ]
    }
   ],
   "source": [
    "# load libraries\n",
    "import pandas\n",
    "import numpy as np \n",
    "from sklearn import cross_validation as cv\n",
    "from sklearn.metrics import matthews_corrcoef\n",
    "from sklearn import preprocessing\n",
    "import time\n",
    "from matplotlib import pyplot as plt\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.cross_decomposition import PLSRegression\n",
    "from sklearn.decomposition import PCA\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Read the dataset in float16 format to conserve memory"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1183747 entries, 0 to 1183746\n",
      "Columns: 970 entries, Id to Response\n",
      "dtypes: float16(970)\n",
      "memory usage: 2.1 GB\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "# read the dataset\n",
    "start = time.time()\n",
    "X_train_all = pandas.read_csv(\"train_numeric.csv\",dtype='float16')\n",
    "print(X_train_all.info(memory_usage=True))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 0.1 Load data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Randomly shuffle data, the select n rows"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# shuffle, randomize the data set\n",
    "X_train_all = X_train_all.iloc[np.random.permutation(len(X_train_all))]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# select n data to speed up\n",
    "i = 10000\n",
    "X_train = X_train_all[:i]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 0.2 Seperate training and testing set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train set size: (10000, 968)\n"
     ]
    }
   ],
   "source": [
    "# labels\n",
    "y_train = X_train['Response'] # get the label of the training set\n",
    "# features\n",
    "X_train = X_train.drop(['Id','Response'], axis=1) # remove the columns of ID and Label in training set\n",
    "\n",
    "print(\"Train set size: {}\".format(X_train.shape))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## 0.3 Data summary"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Basics statistics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training set:\n",
      "# data: 10000\n",
      "# features: 968\n",
      "# passed: 9943\n",
      "# failed: 57\n",
      "% failure rate: 0.573%\n"
     ]
    }
   ],
   "source": [
    "# training set\n",
    "print (\"Training set:\")\n",
    "n_data  = len(X_train)\n",
    "# exclude first colum ID and last column label (substract 2)\n",
    "n_features = X_train.shape[1]\n",
    "# number of satisfied customers\n",
    "n_sat = len(y_train[y_train == 0]) \n",
    "# number of dissatisfied customers\n",
    "n_unsat = len(y_train[y_train == 1]) \n",
    "sat_rate = 100.0*n_unsat/n_sat\n",
    "print (\"# data: {}\".format(n_data))\n",
    "print (\"# features: {}\".format(n_features))\n",
    "print (\"# passed: {}\".format(n_sat))\n",
    "print (\"# failed: {}\".format(n_unsat))\n",
    "print (\"% failure rate: {:.3f}%\".format(sat_rate))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Print the a feature summary, max, min std"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\IPython\\core\\formatters.py:92: DeprecationWarning: DisplayFormatter._ipython_display_formatter_default is deprecated: use @default decorator instead.\n",
      "  def _ipython_display_formatter_default(self):\n",
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\IPython\\core\\formatters.py:669: DeprecationWarning: PlainTextFormatter._singleton_printers_default is deprecated: use @default decorator instead.\n",
      "  def _singleton_printers_default(self):\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>L0_S0_F0</th>\n",
       "      <th>L0_S0_F2</th>\n",
       "      <th>L0_S0_F4</th>\n",
       "      <th>L0_S0_F6</th>\n",
       "      <th>L0_S0_F8</th>\n",
       "      <th>L0_S0_F10</th>\n",
       "      <th>L0_S0_F12</th>\n",
       "      <th>L0_S0_F14</th>\n",
       "      <th>L0_S0_F16</th>\n",
       "      <th>L0_S0_F18</th>\n",
       "      <th>...</th>\n",
       "      <th>L3_S50_F4243</th>\n",
       "      <th>L3_S50_F4245</th>\n",
       "      <th>L3_S50_F4247</th>\n",
       "      <th>L3_S50_F4249</th>\n",
       "      <th>L3_S50_F4251</th>\n",
       "      <th>L3_S50_F4253</th>\n",
       "      <th>L3_S51_F4256</th>\n",
       "      <th>L3_S51_F4258</th>\n",
       "      <th>L3_S51_F4260</th>\n",
       "      <th>L3_S51_F4262</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>5753.000000</td>\n",
       "      <td>5753.000000</td>\n",
       "      <td>5753.000000</td>\n",
       "      <td>5753.000000</td>\n",
       "      <td>5753.000000</td>\n",
       "      <td>5753.000000</td>\n",
       "      <td>5753.000000</td>\n",
       "      <td>5753.000000</td>\n",
       "      <td>5753.000000</td>\n",
       "      <td>5753.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>248.000000</td>\n",
       "      <td>248.000000</td>\n",
       "      <td>248.000000</td>\n",
       "      <td>248.000000</td>\n",
       "      <td>248.000000</td>\n",
       "      <td>248.000000</td>\n",
       "      <td>500.000000</td>\n",
       "      <td>500.000000</td>\n",
       "      <td>500.000000</td>\n",
       "      <td>500.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-0.000385</td>\n",
       "      <td>-0.001043</td>\n",
       "      <td>-0.001509</td>\n",
       "      <td>-0.001362</td>\n",
       "      <td>-0.001517</td>\n",
       "      <td>0.001283</td>\n",
       "      <td>-0.000028</td>\n",
       "      <td>0.000583</td>\n",
       "      <td>-0.001062</td>\n",
       "      <td>-0.001015</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.000003</td>\n",
       "      <td>-0.000004</td>\n",
       "      <td>0.000186</td>\n",
       "      <td>0.000036</td>\n",
       "      <td>0.000052</td>\n",
       "      <td>0.002016</td>\n",
       "      <td>-0.000006</td>\n",
       "      <td>0.000010</td>\n",
       "      <td>0.000012</td>\n",
       "      <td>0.000040</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.080505</td>\n",
       "      <td>0.093140</td>\n",
       "      <td>0.211548</td>\n",
       "      <td>0.211548</td>\n",
       "      <td>0.094788</td>\n",
       "      <td>0.164307</td>\n",
       "      <td>0.019562</td>\n",
       "      <td>0.105774</td>\n",
       "      <td>0.115295</td>\n",
       "      <td>0.113464</td>\n",
       "      <td>...</td>\n",
       "      <td>0.146973</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.002869</td>\n",
       "      <td>0.000488</td>\n",
       "      <td>0.000345</td>\n",
       "      <td>0.250488</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000244</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000345</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-0.407959</td>\n",
       "      <td>-0.422119</td>\n",
       "      <td>-0.396973</td>\n",
       "      <td>-0.396973</td>\n",
       "      <td>-0.404053</td>\n",
       "      <td>-0.565918</td>\n",
       "      <td>-0.052002</td>\n",
       "      <td>-0.232056</td>\n",
       "      <td>-0.393066</td>\n",
       "      <td>-0.344971</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.302002</td>\n",
       "      <td>-0.001000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.250000</td>\n",
       "      <td>-0.001000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-0.049011</td>\n",
       "      <td>-0.064026</td>\n",
       "      <td>-0.178955</td>\n",
       "      <td>-0.178955</td>\n",
       "      <td>-0.056000</td>\n",
       "      <td>-0.065979</td>\n",
       "      <td>-0.014999</td>\n",
       "      <td>-0.072021</td>\n",
       "      <td>-0.081970</td>\n",
       "      <td>-0.083008</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.112000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.250000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.003000</td>\n",
       "      <td>0.004002</td>\n",
       "      <td>-0.032990</td>\n",
       "      <td>-0.033997</td>\n",
       "      <td>0.031006</td>\n",
       "      <td>0.070007</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.032013</td>\n",
       "      <td>-0.005001</td>\n",
       "      <td>0.002001</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.008001</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.056000</td>\n",
       "      <td>0.062988</td>\n",
       "      <td>0.293945</td>\n",
       "      <td>0.293945</td>\n",
       "      <td>0.031006</td>\n",
       "      <td>0.116028</td>\n",
       "      <td>0.014999</td>\n",
       "      <td>0.088013</td>\n",
       "      <td>0.075989</td>\n",
       "      <td>0.077026</td>\n",
       "      <td>...</td>\n",
       "      <td>0.082230</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>0.258057</td>\n",
       "      <td>0.280029</td>\n",
       "      <td>0.566895</td>\n",
       "      <td>0.565918</td>\n",
       "      <td>0.291992</td>\n",
       "      <td>0.206055</td>\n",
       "      <td>0.088989</td>\n",
       "      <td>0.488037</td>\n",
       "      <td>0.427979</td>\n",
       "      <td>0.483887</td>\n",
       "      <td>...</td>\n",
       "      <td>0.452881</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.045013</td>\n",
       "      <td>0.007000</td>\n",
       "      <td>0.003000</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>0.001000</td>\n",
       "      <td>0.005001</td>\n",
       "      <td>0.003000</td>\n",
       "      <td>0.007000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 968 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          L0_S0_F0     L0_S0_F2     L0_S0_F4     L0_S0_F6     L0_S0_F8  \\\n",
       "count  5753.000000  5753.000000  5753.000000  5753.000000  5753.000000   \n",
       "mean     -0.000385    -0.001043    -0.001509    -0.001362    -0.001517   \n",
       "std       0.080505     0.093140     0.211548     0.211548     0.094788   \n",
       "min      -0.407959    -0.422119    -0.396973    -0.396973    -0.404053   \n",
       "25%      -0.049011    -0.064026    -0.178955    -0.178955    -0.056000   \n",
       "50%       0.003000     0.004002    -0.032990    -0.033997     0.031006   \n",
       "75%       0.056000     0.062988     0.293945     0.293945     0.031006   \n",
       "max       0.258057     0.280029     0.566895     0.565918     0.291992   \n",
       "\n",
       "         L0_S0_F10    L0_S0_F12    L0_S0_F14    L0_S0_F16    L0_S0_F18  \\\n",
       "count  5753.000000  5753.000000  5753.000000  5753.000000  5753.000000   \n",
       "mean      0.001283    -0.000028     0.000583    -0.001062    -0.001015   \n",
       "std       0.164307     0.019562     0.105774     0.115295     0.113464   \n",
       "min      -0.565918    -0.052002    -0.232056    -0.393066    -0.344971   \n",
       "25%      -0.065979    -0.014999    -0.072021    -0.081970    -0.083008   \n",
       "50%       0.070007     0.000000    -0.032013    -0.005001     0.002001   \n",
       "75%       0.116028     0.014999     0.088013     0.075989     0.077026   \n",
       "max       0.206055     0.088989     0.488037     0.427979     0.483887   \n",
       "\n",
       "           ...       L3_S50_F4243  L3_S50_F4245  L3_S50_F4247  L3_S50_F4249  \\\n",
       "count      ...         248.000000    248.000000    248.000000    248.000000   \n",
       "mean       ...          -0.000003     -0.000004      0.000186      0.000036   \n",
       "std        ...           0.146973      0.000000      0.002869      0.000488   \n",
       "min        ...          -0.302002     -0.001000      0.000000      0.000000   \n",
       "25%        ...          -0.112000      0.000000      0.000000      0.000000   \n",
       "50%        ...          -0.008001      0.000000      0.000000      0.000000   \n",
       "75%        ...           0.082230      0.000000      0.000000      0.000000   \n",
       "max        ...           0.452881      0.000000      0.045013      0.007000   \n",
       "\n",
       "       L3_S50_F4251  L3_S50_F4253  L3_S51_F4256  L3_S51_F4258  L3_S51_F4260  \\\n",
       "count    248.000000    248.000000    500.000000    500.000000    500.000000   \n",
       "mean       0.000052      0.002016     -0.000006      0.000010      0.000012   \n",
       "std        0.000345      0.250488      0.000000      0.000244      0.000000   \n",
       "min        0.000000     -0.250000     -0.001000      0.000000      0.000000   \n",
       "25%        0.000000     -0.250000      0.000000      0.000000      0.000000   \n",
       "50%        0.000000      0.250000      0.000000      0.000000      0.000000   \n",
       "75%        0.000000      0.250000      0.000000      0.000000      0.000000   \n",
       "max        0.003000      0.250000      0.001000      0.005001      0.003000   \n",
       "\n",
       "       L3_S51_F4262  \n",
       "count    500.000000  \n",
       "mean       0.000040  \n",
       "std        0.000345  \n",
       "min        0.000000  \n",
       "25%        0.000000  \n",
       "50%        0.000000  \n",
       "75%        0.000000  \n",
       "max        0.007000  \n",
       "\n",
       "[8 rows x 968 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## summary\n",
    "X_train.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 0.4 Replace missing data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# replace nan with large num\n",
    "X_train.fillna(value = -2, inplace = True)\n",
    "# replace with mean\n",
    "#X_all.fillna(X_all.mean(), inplace = True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 0.5 Sparsity"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Count the the percentage of missing data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# count the the percentage of missing data in each feature\n",
    "def countNan(X_train):\n",
    "    n_data  = len(X_train) # number of rows\n",
    "    Na_Num = [0] * n_data\n",
    "    headers = list(X_train.columns.values)\n",
    "    xm = X_train.as_matrix() # convert data set to array\n",
    "    m = 0 # inicialized\n",
    "    for i in range(X_train.shape[0]):\n",
    "        count = 0\n",
    "        for j in range(X_train.shape[1]):\n",
    "            if xm[i][j] < -1.99:\n",
    "                count = count + 1\n",
    "        Na_Num[m]= 1.0*count/n_data\n",
    "        m = m+1\n",
    "    return Na_Num"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# count the percentage of missing data\n",
    "Na_Num = countNan(X_train )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total sparsity of the dataset: 0.078%\n"
     ]
    }
   ],
   "source": [
    "# total sparsity to percent\n",
    "print (\"Total sparsity of the dataset: {:.3f}%\".format(np.mean(Na_Num)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plot the distribution of features with missing values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x62c73240>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x62c5e400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# The distribution of features with missing values\n",
    "plt.hist(Na_Num,20,color='w')\n",
    "plt.xlabel(\"% missing value\")\n",
    "plt.ylabel(\"# of features\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 0.6 remove constant columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "# removed constant columns: 0\n"
     ]
    }
   ],
   "source": [
    "# remove constant columns\n",
    "colsToRemove = []\n",
    "for col in X_train.columns:\n",
    "    # column have 0 standard deviation\n",
    "    if X_train[col].std() == 0: \n",
    "        colsToRemove.append(col)\n",
    "# remove constant columns in the training set\n",
    "X_train.drop(colsToRemove, axis=1, inplace=True) \n",
    "# remove constant columns in the test set\n",
    "print(\"# removed constant columns: {}\".format(len(colsToRemove)))  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. Clustering"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create a binary features to describe  wehter the feature is missing in a process"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.0 Create binary features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# inicalize a dataframe to hold binary values\n",
    "X_train_bi = X_train.copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# O:the data is missing, 1:the data is present"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "headers = list(X_train.columns.values)\n",
    "for i in headers:\n",
    "    X_train_bi.loc[X_train[i] > -1.99 , i] = 1\n",
    "    X_train_bi.loc[X_train[i] < -1.99 , i] = 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 10000 entries, 479094 to 751347\n",
      "Columns: 968 entries, L0_S0_F0 to L3_S51_F4262\n",
      "dtypes: int8(968)\n",
      "memory usage: 9.3 MB\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "# convert the data frame to int to save memory\n",
    "X_train_bi = X_train_bi.astype('int8')\n",
    "print(X_train_bi.info(memory_usage=True))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## 1.1 PCA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PCA(copy=True, n_components=968, whiten=False)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# n_components equal # feature\n",
    "pca = PCA(n_components= X_train_bi.shape[1]) \n",
    "pca.fit(X_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.2 Variance explaining ratio"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x4e873c88>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nzjrrrMR/zaeei4Zy0a4PnhicyzG1rbtPd8E9+uij7corr7QDDjggcn2bNm2soKDAxo4dm/ZJm2HD\nhlV6jEz8mnfV54nBuSxT27r7cePGRV6UDzjgADvllFOsdevWkes7duxoV1xxhfXu3bvSKhwz/zXf\n0HlicC6L1PTXfrdu3eyYY46xHj16WNhHWIXPgQceaE888YSNHDmyVlU4ceIs2cYv6rnJE4Nz9ayy\nO4J0F+UDDjjACgoK0r4Idcghh9iLL75o7733np199tm1+jVf148+utzjicG5ehR10e3evbvdfffd\ndv3111uHDh0iL+q9e/e2Z555JtZz9XXxa94v+o1bTRJDomM+1yVJliuxuoahqn55TjvtNKZPn15h\nv44dOzJmzBhee+01Xn/99QrrCwsLefDBByP75cnLyyvTd09qHBs3bqRz586RHb85l44krJrdbnti\ncC5C1EW7e/fuXHjhhSxfvpwXX3yRtWvX8u2331bYt6CggBdeeCHWhd8v+i5pnhicq4bK7gjGjx/P\n1KlTK+yz//778+tf/5r8/HyuvfZaHnrooQrblNwRpB7DL/wuUzwxOBdTujuCiy++mLfffpupU6ey\nc+fOCvuV3A2kKyOqKsi5TKpJYvAxn12jNHHixAp94q9du5abbrqJ/v37c9xxx0Xu17lz59Lpnj17\nMmfOHAoLCykoKKCwsNCTgmsQEr9jkDQKuJkgCd1lZteVW783cDeQB+wAfmpmyyPK8TsGF1tUNVGP\nHj145513mDVrFr/73e/YunVrhf2q0z7gXC6oyR1D0kN7NgFuA4YDG4EFkp40s5Upm/0GWGxmp0vq\nA/wJ+GGScbmGLeqiPnPmTNq2bcvu3bs56aST6N+/Py+99FKFfUvuCEruBrx9wDVGid4xSBoMTDKz\nE8L5ywmeqb0uZZungGvN7NVw/j1giJltLleW3zG4UpU1HJ9xxhk8/vjjFfY54YQTmDVrFpL8jsA1\nGll3xwB0AdalzK8HBpXbZilwOvCqpEFAN6ArsBnnIkRd1F988UXOPvtsXn31VRYsWBC5386dO5GC\n/x9+R+Bcekknhjh+D9wiaRGwDFgM7IracPLkyaXT+fn55Ofn10N4LttENRyvX7+emTNnctttt3H3\n3Xczbdq0CvulNhxDkBxKHit1rqEoKiqiqKioVmXUR1XSZDMbFc5XqEqK2KcY6GdmX5Zb7lVJjq+/\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x89e29be0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot variance explained ratio\n",
    "plt.plot(np.cumsum(pca.explained_variance_ratio_[:40]),'-ko')\n",
    "plt.xlabel('number of principle components')\n",
    "plt.ylabel('variance explantion rate')\n",
    "plt.title(\" Variance explained ratio\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## 1.3 Visualization"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Reduce the feature dimension to 2d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Project on 2 PCs\n",
    "pca_2d = PCA(n_components = 2) # 2 principle components\n",
    "pca_2d.fit(X_train)\n",
    "# reduce the dataset to 2 pcs\n",
    "reduced_data = pca_2d.fit_transform(X_train) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Dalaska\\Anaconda2\\lib\\site-packages\\matplotlib\\axes\\_axes.py:519: UserWarning: No labelled objects found. Use label='...' kwarg on individual plots.\n",
      "  warnings.warn(\"No labelled objects found. \"\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nl4twOIzL5SIYDFJcXMyCBQvIyckhHA6zatUq1qxZo9+fnGfIsz5Nd9G0Kdbauksd3HBQoCYiIkOl\nr+zDYDDI4cOHaWpqYvr06USjUbZv305ubi6dnZ10dHSwf/9+3G430WiUK6+8klWrVqn2nfQyXOU5\ndlprh79z7SAoUBMRkaF0obOZPYO6eO9OgLy8vFE3k+Y4DoFAgPb2djo6OqioqMDn82lmd4gNV6D2\nAvATa+3WSxnccFCgJiIi6TLaT1EfP36c999/nzNnzrB7925qa2s5ffo05eXlTJ48mVWrVjFt2jR1\nxxhCwxWo7QNmA0eAABlUnkOBmoiIyMU5c+YMf//3f8+vfvWrPm9TWVnJ7Nmz+frXv47b7aatrY2b\nb765z96mcmGGq+DtrYMcj4iIiMS0t7fT2NhIaWkpfr9/xJ8/GAzy85//nEcffZRIJNLvbT/88EM6\nOzt5/fXXKSsro6urC2MMN9xwg2bWRlh/WZ8+4EFgFrATeNZam1H5xppRExGR0WDz5s08+eSTNDU1\nkZeXx9e//nWWLFky7KdO46dnjx8/zre+9S1effXVi7r/9ddfT2lpKcuWLWPJkiU4jqO+s5dgqGfU\nXgDCwLt0F72dD/zt4IcnIiIy/nz00Ufcf//9HDx4EMdxyMrK4p133uHRRx+lurp62NaANTQ0sGnT\nJlpaWnj++edZt27dRT/G9u3bEz1nfT4fLS0tGdtqaazqb0Ytke1pjHEDW6y11SM5uIFoRk1ERDJZ\nfX099957L2vXru11XV5eHj/4wQ+45ppr+m0KPlDSQjxjM/6YbrebhoYGfvazn7Fv3z5qa2vZv3//\noF9DUVER1157LV/96lcThWIVqA3OUM+oheMXrLVOd0k1ERERuRANDQ08/vjjKYM0gEAgwLPPPsuC\nBQsIh8O9Zqocx+HkyZPs2rWLUChEbm5uotl78vWbN2/m0KFDWGuZN28eS5Ys4Z133uHw4cMcPHiQ\nU6dOXdLrsNYmMkMfeughBWkjrL+9vdAYcy522QA5sZ/jWZ8Fwz46EZEURntZBBn7HMdh48aNbN++\nvd/bnTt3jrq6OiZPnnxeU/Dm5ma2bdvGhg0baGhoYPLkyeTl5SWavZ87d45t27axdetW6uvrmTt3\nLn6/nz179rBz506amprYsWMHdXV1hMPhfkYwML/fT1VVFfPmzSM3N/eSHksuXp/vcNZa10gORMYX\n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\nU621LbG1a783xsy31rYP51hFREREMs2wBmrW2k8M4j5hoCV2ucYY8yEwB6hJdfvvfve7icsrV65k\n5cqVgxmqiIiIyJBat24d69atu6THSHuvT2PMWrqTCbbHfp4INFtro8aYmcB64Cpr7dkU91UygYiI\niIwKo6rXpzHmLmPMMWAp8AdjzJ9iV90I7DDG1AC/Bb6aKkgTERERGevSPqN2KTSjJiIiIqPFqJpR\nExEREZH+KVATERERyVAK1EREREQylAI1ERERkQylQE1EREQkQylQExEREclQCtREREREMpQCNRER\nEZEMpUBNREREJEMpUBMRERHJUArURERERDKUAjURERGRDKVATURERCRDKVATERERyVAK1EREREQy\nlAI1ERERkQylQE1EREQkQylQExEREclQCtREREREMpQCNREREZEMpUBN5CI4jkMgEMBxnHQPRURE\nxgF3ugcgMlo0NzdTW1tLOBzG4/FQXV1NcXFxuoclIiJjmGbURC6A4zjU1tbi8/koLS3F5/NRU1Oj\nmTURERlWCtRELkAoFCIcDuPz+QDw+XyEw2FCoVCaRyYiImOZAjWRC+D1evF4PASDQQCCwSAejwev\n15vmkYmIyFimQE3kArjdbqqrqwkGgzQ2NhIMBqmursbt1jJPEREZPsZam+4xDJoxxo7m8cvo4zgO\noVAIr9erIE1ERC6KMQZrrbmo+4zmQEeBmoiIiIwWgwnUdOpTREREJEMpUBMRERHJUArURERERDKU\nAjURERGRDKVATURERCRDKVATERERyVAK1EREREQylAI1ERERkQylQE1EREQkQylQExEREclQCtRE\nREREMpQCNREREZEMpUBNREREJEMpUBMRERHJUArURERERDKUAjURERGRDKVATURERCRDKVATERER\nyVAK1EREREQylAI1ERERkQylQE1EREQkQylQExEREclQCtREREREMpQCNREREZEMpUBNREREJEMp\nUBMRERHJUArURERERDKUAjURERGRDJW2QM0Y8y/GmL3GmA+MMb8zxhQkXfctY8zB2PW3pGuMIiIi\nIumUzhm1/wCusNYuAg4C3wIwxswH7gbmAauBnxpjTNpGOQqtW7cu3UPISNovqWm/9KZ9kpr2S2ra\nL6lpvwyNtAVq1to/W2ujsR83AZfHLt8J/MZa61hrj9AdxC1OwxBHLf1xpKb9kpr2S2/aJ6lpv6Sm\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x4e84b2b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time (secs): 109.835\n"
     ]
    }
   ],
   "source": [
    "# Visualization PCA in 2D\n",
    "fig = plt.figure(figsize=(10, 7))\n",
    "ax = fig.add_subplot(1, 1, 1)\n",
    "#colors = [(0.0, 0.63, 0.69), 'black']\n",
    "colors = [ 'black']\n",
    "classes = [0,1]\n",
    "#labels = [\"passed\", \"failed\"]\n",
    "labels = [\"\"]\n",
    "markers = [\"o\"]\n",
    "#markers = [\"o\", \"D\"]\n",
    "for class_ix, marker, color, label in zip(classes, markers, colors, labels):\n",
    "    ax.scatter(reduced_data[:, 0],\n",
    "               reduced_data[:, 1],\n",
    "               marker=marker, color=color, \n",
    "               #edgecolor='whitesmoke',\n",
    "               linewidth='1', alpha=0.2, label=label)\n",
    "    ax.legend(loc='best')\n",
    "plt.title(\" Principal Components Analysis\")\n",
    "plt.xlabel(\"Principal Axis 1\")\n",
    "plt.ylabel(\"Principal Axis 2\")\n",
    "plt.show()\n",
    "end = time.time()\n",
    "print (\"time (secs): {:.3f}\".format(end - start))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\neighbors\\__init__.py:6: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from .ball_tree import BallTree\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\neighbors\\__init__.py:7: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from .kd_tree import KDTree\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\utils\\graph.py:16: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from .graph_shortest_path import graph_shortest_path\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\isotonic.py:11: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from ._isotonic import _isotonic_regression\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\manifold\\t_sne.py:21: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from . import _utils\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\cluster\\k_means_.py:34: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from . import _k_means\n",
      "C:\\Users\\Dalaska\\AppData\\Roaming\\Python\\Python27\\site-packages\\sklearn\\cluster\\hierarchical.py:24: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility\n",
      "  from . import _hierarchical\n"
     ]
    }
   ],
   "source": [
    "# Import clustering modules\n",
    "from sklearn.cluster import KMeans\n",
    "from sklearn.mixture import GMM"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.4 Choose the number of cluster"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "load libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.cm as cm\n",
    "from sklearn.utils import shuffle\n",
    "from sklearn.utils import check_random_state\n",
    "from sklearn.cluster import MiniBatchKMeans\n",
    "from sklearn.cluster import KMeans\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Evaluation of KMeans with random init\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x282795f8>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nbbhDMcYU4aOPPqJTp05Frt+9ezdRUVHk5lbYBSyLtWTJEtq0aVPyhuUgOjo66BP7pdm2vFnCAVq0\naMFll13GokWLwh2KMUFLSEgoMIx/5syZNGnShGXLluV/+F5xxRUF6hw+fJjatWvTrl2FXca+3PTs\n2bNA13fhxw/eeYVIUlHxfPXVV7Rt27bU2/7P//wPTzzxROgCK8QSjjNo0CDrVjNB27lzJ0OHDiU1\nNbXMUyOVRxt5Jk+ezI9//GPmzZtHr1698su//vprNm3alH9/xowZJCYmlnk/VVmkHBlVaaWdfK2q\n3XCTd+7evVvPP/98PXXqVHHz1ZlqhgCTu+7YsUMTExMV7xpPCmhiYqLu2LEj6HbLo422bdvqBx98\noK+88oo2a9ZMP/nkk/x1u3btUhHRp556Sh9++OH88iuvvFJ/85vfaEJCQn5ZVlaWDh48WJs1a6bt\n2rXTP/7xj/nrVq1apVdffbXGxMRoq1at9IEHHijwPyIi+sorr+iFF16ojRs31vvvvz9/3X/+8x/t\n06ePNmrUSJs1a6ZpaWkBH8ewYcP0+eefV1XVzMxMFRGdMGFCfhtNmjRRVdWMjAxt3bq1qqredddd\nGhUVpfXq1dPo6Gh97rnn8h/z5MmTNT4+Xps1a6ZPPfVUkc/f8OHD9b777tObbrpJGzRooB988IG+\n++672rVrV23YsKHGx8fr2LFjz3pOi2r/m2++0WHDhmnjxo31kksu0eeee07btGmTv37z5s2akpKi\nMTExeumll+rbb79dIJaRI0fqjTfeqA0aNNCePXvqvn379KGHHtLGjRtrp06ddP369UU+FhHR7du3\n57d1//33680336zR0dF61VVXFXhf5W376quvaq1atbROnToaHR2t/fv3D9h2oP8BX3npPm9LW6Gq\n3fxP5pVXXqkffPBBwCfXVE+B/tnS09MLJIq8W3p6etDtlkcbbdu21cGDB2tsbKxu2LChwLpdu3Zp\nVFSU7t69W9u0aaO5ubm6ceNG7dSpky5atCg/4eTm5uoVV1yhTz75pJ4+fVp37typiYmJumDBAlVV\nXbt2ra5cuVJzc3N19+7devHFF+sf/vCH/P2IiN5666167Ngx/eKLL7RZs2Y6f/58VVW944479De/\n+Y2qqp48eVI//vjjgI/jr3/9a/6H3YwZM7R9+/b5yemvf/2r3nbbbarqJRz/B3jbtm118eLFBR6z\n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\nFJyIiKjiP4tlHtXZ7yiJAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x28293da0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "random_state = np.random.RandomState(42)\n",
    "# Number of run (with randomly generated dataset) for each strategy so as\n",
    "# to be able to compute an estimate of the standard deviation\n",
    "n_runs = 5 # number of repeating\n",
    "\n",
    "# k-means models can do several random inits so as to be able to trade\n",
    "# CPU time for convergence robustness\n",
    "\n",
    "N_clusters = [2,3,4,5,6,7,8,9,10]\n",
    "n_init = 3;\n",
    "# Part 1: Quantitative evaluation of various init methods\n",
    "\n",
    "fig = plt.figure()\n",
    "plots = []\n",
    "legends = []\n",
    "\n",
    "cases = [ (KMeans, 'random', {})]\n",
    "\n",
    "for factory, init, params in cases:\n",
    "    print(\"Evaluation of %s with %s init\" % (factory.__name__, init))\n",
    "    inertia = np.empty((len(N_clusters), n_runs))\n",
    "\n",
    "    for run_id in range(n_runs):\n",
    "        #X, y = make_data(run_id, n_samples_per_center, grid_size, scale)  \n",
    "        X = reduced_data\n",
    "        #for i, n_init in enumerate(n_init_range):\n",
    "        for i, n_clusters in enumerate(N_clusters):\n",
    "            km = factory(n_clusters=n_clusters, init=init, random_state=run_id,\n",
    "                         n_init=n_init, **params).fit(X)\n",
    "            inertia[i, run_id] = km.inertia_\n",
    "    #p = plt.errorbar(N_clusters, inertia.mean(axis=1), inertia.std(axis=1))\n",
    "    p = plt.plot(N_clusters, inertia.mean(axis=1),'-ko')\n",
    "    plots.append(p[0])\n",
    "    legends.append(\"%s with %s init\" % (factory.__name__, init))\n",
    "#print(inertia)\n",
    "plt.xlabel('n_init')\n",
    "plt.ylabel('inertia')\n",
    "plt.legend(plots, legends)\n",
    "plt.title(\"Mean inertia for various k-means init across %d runs\" % n_runs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The number of cluster is set to be 6 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.6 Cluster"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Cluster the data based on the manufacture process"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "KMeans(copy_x=True, init='k-means++', max_iter=300, n_clusters=6, n_init=10,\n",
      "    n_jobs=1, precompute_distances=True, random_state=42, tol=0.0001,\n",
      "    verbose=0)\n"
     ]
    }
   ],
   "source": [
    "from sklearn import mixture\n",
    "clusters= KMeans(n_clusters=6, random_state=42)\n",
    "clusters.fit(reduced_data) \n",
    "print (clusters)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Plot the decision boundary by building a mesh grid to populate a graph.\n",
    "x_min, x_max = reduced_data[:, 0].min() - 1, reduced_data[:, 0].max() + 1\n",
    "y_min, y_max = reduced_data[:, 1].min() - 1, reduced_data[:, 1].max() + 1\n",
    "hx = (x_max-x_min)/1000.\n",
    "hy = (y_max-y_min)/1000.\n",
    "xx, yy = np.meshgrid(np.arange(x_min, x_max, hx), np.arange(y_min, y_max, hy))\n",
    "\n",
    "# Obtain labels for each point in mesh. Use last trained model.\n",
    "Z = clusters.predict(np.c_[xx.ravel(), yy.ravel()])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Centroids:\n",
      "[[  5.16  -6.01]\n",
      " [ -5.     4.1 ]\n",
      " [  1.92   5.87]\n",
      " [-21.5  -12.1 ]\n",
      " [ -2.89  -8.39]\n",
      " [-23.65   0.3 ]]\n"
     ]
    }
   ],
   "source": [
    "import numpy \n",
    "centroids = clusters.cluster_centers_\n",
    "np.set_printoptions(precision=2, suppress=True) # set printing format\n",
    "print (\"Centroids:\")\n",
    "print (centroids)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.7 visualize the cluster"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x28293c18>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Put the result into a color plot\n",
    "def visual(Z,xx,yy,centroids):\n",
    "    Z = Z.reshape(xx.shape)\n",
    "    plt.figure(figsize=(10, 7))\n",
    "    plt.clf()\n",
    "    plt.imshow(Z, interpolation='nearest',\n",
    "                   extent=(xx.min(), xx.max(), yy.min(), yy.max()),\n",
    "                   cmap=plt.cm.Paired,\n",
    "                   aspect='auto', origin='lower')\n",
    "\n",
    "    plt.plot(reduced_data[:, 0], reduced_data[:, 1], 'k.', markersize=15, alpha=0.2)\n",
    "    plt.scatter(centroids[:, 0], centroids[:, 1],\n",
    "                    marker='x', s=120, linewidths=3,\n",
    "                    color='w', zorder=10)\n",
    "    #plt.title('Clustering on the wholesale grocery dataset (PCA-reduced data)\\n'\n",
    "    #              'Centroids are marked with white cross')\n",
    "    plt.xlabel(\"Principal Axis 1\")\n",
    "    plt.ylabel(\"Principal Axis 2\")\n",
    "    plt.xlim(x_min, x_max)\n",
    "    plt.ylim(y_min, y_max)\n",
    "    #plt.xticks(())\n",
    "    #plt.yticks(())\n",
    "    plt.show()\n",
    "\n",
    "visual(Z,xx,yy,centroids)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## 2 Model Selection "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## 2.1 train the classifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Train a model\n",
    "def train_classifier(clf, X_Train, y_Train):\n",
    "    #print (\"{}...\".format(clf.__class__.__name__))\n",
    "    start = time.time()\n",
    "    clf.fit(X_Train, y_Train)\n",
    "    end = time.time()\n",
    "    train_time = end - start\n",
    "    return clf,train_time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# debug\n",
    "#clf,train_time = train_classifier(clf1, X_cv_train, y_cv_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.2 Predict labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# For parameter tuning\n",
    "# Predict on training set and compute matthews corrcoef\n",
    "from sklearn.metrics import roc_auc_score\n",
    "def predict_labels(clf, features, target):\n",
    "    start = time.time()\n",
    "    y_pred = clf.predict_proba(features)\n",
    "    end = time.time()\n",
    "    auroc = roc_auc_score(target, y_pred[:,1]) # select column\n",
    "    p_val,mcc  = find_p(y_pred[:,1],target )\n",
    "    return y_pred[:,1],p_val,mcc,auroc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.3 Optimize MCC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# optimized MCC\n",
    "def find_p(y_prob,y_target ):\n",
    "    grid = np.multiply(0.01,range(100)) \n",
    "    # tune p\n",
    "    p_list = []\n",
    "    pred = [0]*len(y_prob)\n",
    "    for p in grid:\n",
    "        for i in range(len(y_prob)):        \n",
    "            if y_prob[i] > p:\n",
    "                pred[i] = 1\n",
    "            else:\n",
    "                pred[i] = 0       \n",
    "        score = matthews_corrcoef(y_target, pred)\n",
    "        p_list.append(score)\n",
    "    p_val = grid[p_list.index(max(p_list))]\n",
    "    best_score  = max(p_list)\n",
    "    \n",
    "    return p_val , best_score "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.4 Crossvalidation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# For parameter tuning\n",
    "# Train and predict using different training set sizes\n",
    "def train_predict(clf, X_Train, y_Train, X_Test, y_Test):\n",
    "    clf,train_time = train_classifier(clf, X_Train, y_Train)\n",
    "    y_p_train, p_val_train , mcc_train, auc_train = predict_labels(clf, X_Train, y_Train)\n",
    "    y_p_test,  p_val_test ,  mcc_test,  auc_test = predict_labels(clf, X_Test, y_Test)\n",
    "    print (\"{}...\".format(clf.__class__.__name__))\n",
    "    print (\"     train time:{:.0f}, test mcc: {:.4f}, acu: {:.3f}, train mcc: {:.3f}, auc: {:.3f}\".format(train_time,mcc_test,auc_test,mcc_train,auc_train ))\n",
    "    return clf,y_p_test, p_val_test, p_val_train, mcc_test , auc_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# debug\n",
    "#clf,y_p_test, p_val_test, p_val_train, mcc_test , auc_train = train_predict(clf, X_cv_train, y_cv_train, X_cv_test, y_cv_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "load libaries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# load libaries\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.ensemble import AdaBoostClassifier\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.ensemble import GradientBoostingClassifier\n",
    "from sklearn import linear_model \n",
    "from sklearn import naive_bayes \n",
    "from sklearn import ensemble\n",
    "from sklearn import tree\n",
    "from sklearn import metrics\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.naive_bayes import GaussianNB\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.7 Seperate training and testing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training set: 8500 samples\n",
      "Test set: 1500 samples\n"
     ]
    }
   ],
   "source": [
    "# First, decide how many training vs test samples you want\n",
    "from sklearn.cross_validation import train_test_split\n",
    "\n",
    "num_all = X_train.shape[0]  # same as len(student_data)\n",
    "num_train = int(0.85*num_all)  # about 75% of the data\n",
    "num_test = num_all - num_train\n",
    "\n",
    "X_cv_train, X_cv_test, y_cv_train, y_cv_test = train_test_split(X_train, y_train, train_size = num_train)\n",
    "\n",
    "print (\"Training set: {} samples\".format(X_cv_train.shape[0]))\n",
    "print (\"Test set: {} samples\".format(X_cv_test.shape[0]))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.8 Different models"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DecisionTreeClassifier...\n",
      "     train time:5, test mcc: -0.0057, acu: 0.498, train mcc: 1.000, auc: 1.000\n",
      "AdaBoostClassifier...\n",
      "     train time:2, test mcc: 0.0588, acu: 0.544, train mcc: 0.149, auc: 0.880\n",
      "RandomForestClassifier...\n",
      "     train time:1, test mcc: 0.0962, acu: 0.516, train mcc: 0.989, auc: 1.000\n"
     ]
    }
   ],
   "source": [
    "clf1 = DecisionTreeClassifier()\n",
    "clf2 = AdaBoostClassifier(n_estimators = 10)\n",
    "clf3 = RandomForestClassifier(n_estimators = 10)\n",
    "    \n",
    "train_size = [1000,]\n",
    "for i in train_size:\n",
    "    clf1,y_pred1,p2t,p2n,mcc,auc = train_predict(clf1, X_cv_train, y_cv_train, X_cv_test, y_cv_test)\n",
    "    clf2,y_pred2,p2t,p2n,mcc,auc = train_predict(clf2, X_cv_train, y_cv_train, X_cv_test, y_cv_test)\n",
    "    clf3,y_pred3,p2t,p2n,mcc,auc = train_predict(clf3, X_cv_train, y_cv_train, X_cv_test, y_cv_test)\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.9 plot ROC curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x8188af60>"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nkxqHHA0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x81899b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import roc_curve, auc\n",
    "fpr1, tpr1, thresholds1 = roc_curve(y_cv_test, y_pred1)\n",
    "fpr2, tpr2, thresholds2 = roc_curve(y_cv_test, y_pred2)\n",
    "fpr3, tpr3, thresholds3 = roc_curve(y_cv_test, y_pred3)\n",
    "\n",
    "plt.figure(figsize=(8,5))\n",
    "plt.plot(fpr1, tpr1, lw=2, label='Cluster 1' )\n",
    "plt.plot(fpr2, tpr2, lw=2, label='Cluster 2' )\n",
    "plt.plot(fpr3, tpr3, lw=2, label='Cluster 3' )\n",
    "plt.plot([0, 1], [0, 1],'--', color=(0.6, 0.6, 0.6), label='Luck')\n",
    "plt.grid()\n",
    "plt.xlabel('False Positive Rate')\n",
    "plt.ylabel('True Positive Rate')\n",
    "plt.legend(loc=\"lower right\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## 3.0 Model refining"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ftr: 20 ,dpt: 2 ,lef: 4\n",
      "RandomForestClassifier...\n",
      "     train time:0, test mcc: 0.0000, acu: 0.475, train mcc: 0.044, auc: 0.566\n",
      "ftr: 20 ,dpt: 2 ,lef: 5\n",
      "RandomForestClassifier...\n",
      "     train time:0, test mcc: 0.0000, acu: 0.475, train mcc: 0.044, auc: 0.566\n",
      "ftr: 20 ,dpt: 3 ,lef: 4\n",
      "RandomForestClassifier...\n",
      "     train time:0, test mcc: 0.0141, acu: 0.500, train mcc: 0.094, auc: 0.607\n",
      "ftr: 20 ,dpt: 3 ,lef: 5\n",
      "RandomForestClassifier...\n",
      "     train time:0, test mcc: 0.0141, acu: 0.500, train mcc: 0.090, auc: 0.607\n",
      "ftr: 30 ,dpt: 2 ,lef: 4\n",
      "RandomForestClassifier...\n",
      "     train time:0, test mcc: 0.0033, acu: 0.472, train mcc: 0.073, auc: 0.553\n",
      "ftr: 30 ,dpt: 2 ,lef: 5\n",
      "RandomForestClassifier...\n",
      "     train time:0, test mcc: 0.0033, acu: 0.472, train mcc: 0.045, auc: 0.552\n",
      "ftr: 30 ,dpt: 3 ,lef: 4\n",
      "RandomForestClassifier...\n",
      "     train time:0, test mcc: 0.0040, acu: 0.472, train mcc: 0.199, auc: 0.566\n",
      "ftr: 30 ,dpt: 3 ,lef: 5\n",
      "RandomForestClassifier...\n",
      "     train time:0, test mcc: 0.0033, acu: 0.472, train mcc: 0.199, auc: 0.565\n",
      "\n",
      "Best Parameters:\n",
      "mcc: 0.0141, p:0.00, auc_:0.607 ftr: 20, dpt: 3, lef: 4\n",
      "mcc: 0.0141, p:0.00, auc_:0.607 ftr: 20, dpt: 3, lef: 5\n",
      "mcc: 0.0040, p:0.00, auc_:0.566 ftr: 30, dpt: 3, lef: 4\n",
      "mcc: 0.0033, p:0.00, auc_:0.552 ftr: 30, dpt: 2, lef: 5\n",
      "mcc: 0.0033, p:0.00, auc_:0.553 ftr: 30, dpt: 2, lef: 4\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x621e8d30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# use grid search to optimized the parameters\n",
    "# max_depth\n",
    "y = [2,3] #8\n",
    "# max_feature\n",
    "x = [20,30] #7\n",
    "# tree leaf\n",
    "z = [4,5] # 9\n",
    "\n",
    "# save the result into a list\n",
    "MCC =[] # mcc score\n",
    "ftr = [] # number of feature\n",
    "dpt = [] # tree depth\n",
    "lef = [] # min leaf\n",
    "pt = [] # threshold\n",
    "AUC = [] # aus score\n",
    "\n",
    "for i in x:\n",
    "    for j in y:\n",
    "        for k in z:\n",
    "            print (\"ftr: {} ,dpt: {} ,lef: {}\".format(i,j,k ))\n",
    "            clf = RandomForestClassifier(n_estimators = 1,\n",
    "                                         max_features = i,\n",
    "                                         max_depth = j,\n",
    "                                         min_samples_leaf = k,\n",
    "                                         random_state = 42,) \n",
    "            clf,y_pred,p2t,p2n,mcc,auc = train_predict(clf, X_cv_train, y_cv_train, X_cv_test, y_cv_test)\n",
    "            MCC.append(mcc)\n",
    "            ftr.append(i)\n",
    "            dpt.append(j)\n",
    "            lef.append(k)\n",
    "            pt.append(p2t)\n",
    "            AUC.append(auc)\n",
    "    \n",
    "# Visual aesthetics\n",
    "plt.figure(figsize=(5,2))\n",
    "plt.plot(MCC, color='r')\n",
    "plt.legend()\n",
    "plt.xlabel('x')\n",
    "plt.ylabel('mcc')\n",
    "\n",
    "MCC2 = [x*(-1) for x in MCC]\n",
    "sort_id = np.argsort(MCC2)\n",
    "print('\\nBest Parameters:')\n",
    "for i in range(5):\n",
    "    print (\"mcc: {:.4f}, p:{:.2f}, auc_:{:.3f} ftr: {}, dpt: {}, lef: {}\".format(MCC[sort_id[i]],pt[sort_id[i]],AUC[sort_id[i]],ftr[sort_id[i]],dpt[sort_id[i]],lef[sort_id[i]] ))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
